home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / plain / contrib / appelt-chess.tex < prev    next >
Encoding:
Text File  |  1992-08-26  |  9.0 KB  |  244 lines

  1. %--------------------- Cut here ----------------------------------
  2.  
  3. %
  4. %---------------------- General ----------------------------------
  5. %
  6. \font\gray=gray
  7. \font\sym    =cmsy10
  8. \font\bsym   =cmsy10    scaled \magstep1
  9. \font\bbrm   =cmr10     scaled \magstep2
  10. \font\bbss   =cmss10    scaled \magstep2
  11. \font\ssbf   =cmssbx10
  12. \font\bssbf  =cmssbx10  scaled \magstep1
  13. \font\bbssbf =cmssbx10  scaled \magstep2
  14. \font\bbbf   =cmbx10    scaled \magstep2
  15. \font\bbbbsym=cmsy10    scaled \magstep4
  16. \font\bsymbf =cmbsy10   scaled \magstep1
  17. \font\symbf  =cmbsy10
  18. \font\ninesym=cmsy9
  19. \font\eightsym=cmsy8
  20.  
  21. \newif\ifblackfield
  22. \newcount\movenumber
  23. \newcount\linecount
  24. \newcount\colcount
  25.  
  26. \newbox\boxone \newdimen\dimenone
  27. \newbox\boxtwo \newdimen\dimentwo
  28. \newdimen\dimenthree
  29. \newskip\headskipamount  \headskipamount=-8pt
  30. \newskip\footskipamount  \footskipamount=-5pt
  31.  
  32. % 1 dot = 15787.6224 sp bei 300 dots/inch
  33. \newdimen\lowerpiece \lowerpiece=47363sp
  34. \newdimen\fieldwidth \fieldwidth=1326160sp % 84 dots bei 300 dpi
  35. \newdimen\fieldheight \fieldheight=994620sp % 63 dots
  36. \newdimen\fielddepth \fielddepth=\fieldwidth % Rest
  37.      \advance\fielddepth by -\fieldheight
  38. \newdimen\framewidth  \framewidth=252602sp % 16 dots
  39.  
  40. \def\notation{%
  41.     \catcode`\8=11 \catcode`\2=11 \catcode`\3=11 \catcode`\4=11
  42.     \catcode`\5=11 \catcode`\6=11 \catcode`\7=11 \catcode`\1=11}
  43. \catcode`\@=11
  44. %
  45. %---------------------- Pieces -----------------------------------
  46. %
  47. \def\setpiece#1{\lower\lowerpiece\hbox to \fieldwidth{\hfill#1\hfill}}
  48.  
  49. \def\together#1#2{%
  50.    \setbox\boxone=\hbox{#1}\setbox\boxtwo=\hbox{#2}%
  51.    \dimenone=\wd\boxone \dimentwo=\wd\boxtwo
  52.    \dimenthree=-\dimenone
  53.    \advance\dimenone by -\dimentwo \divide\dimenone by 2
  54.    \advance\dimenthree by \dimenone
  55.    \unhbox\boxone\kern\dimenthree\unhbox\boxtwo}
  56.  
  57. \def\pmb#1{\setbox0=\hbox{#1}%
  58.     \kern-.025em\copy0\kern-\wd0
  59.     \kern .05em\copy0\kern-\wd0
  60.     \kern-0.025em\raise .0433em\box0 }
  61. \def\WB{\together{\kern 0pt\hbox{\bbbbsym\char14 }}%
  62.     {\kern -1pt\hbox{\vrule height 1.4pt depth 0pt width 8pt}}}
  63. \def\SB{\together{\kern 0pt\hbox{\bbbbsym\char15 }}%
  64.     {\kern -1pt\hbox{\vrule height 1.4pt depth 0pt width 8pt}}}
  65. \edef\WS{\setbox0=\hbox{\bsym\char120 }\raise\dp0\hbox{\unhbox0 }}
  66. \edef\SS{\setbox0=\hbox{\pmb{\bsymbf\char120 }}%
  67.    \together{\raise\dp0\hbox{\unhbox0 }}%
  68.         {\raise3pt\hbox{\pmb{\symbf\char15 }}}}
  69. \edef\WT{{\bbrm\char5 }}
  70. \edef\ST{\together{\kern-1pt\hbox{\bbbf\char5 }}%
  71.      {\vrule height 9.5pt width 6pt depth 0pt}}
  72. \edef\WK{\together{\symbf\char117 }%
  73.      {\together{\raise 4pt\hbox{\sym\char121 }}%
  74.      {\vrule width 5pt depth0pt height 0.4pt}}}
  75. \edef\SK{\together{\vrule width 6pt depth 0pt height 6pt}%
  76.     {\raise 5pt \hbox{\symbf\char121 }}}
  77. \edef\WL{{\bbss\char3 }}
  78. \edef\SL{\together{\bbssbf\char3 }%
  79.     {\together{\bssbf\char3 }{\together{\vrule height 5pt width 5pt
  80.                         depth 0pt}{\ssbf\char3 }}}}
  81. \edef\SD{\together{\together{\pmb{\symbf\char52 }}%
  82.            {\together{\pmb{\ninesym\char52 }}%
  83.            {\together{\pmb{\eightsym\char52 }}{\symbf\char15 }}}}%
  84.            {\kern 1pt\hbox{\raise 6pt\hbox{\symbf\char15 }}}}
  85. \edef\WD{\together{\symbf\char52 }%
  86.     {\kern  0pt\hbox{\raise 6pt\hbox{\symbf\char14 }}}}
  87. %
  88. %---------------------- Board ------------------------------------
  89. %
  90. \def\fieldstrut{\vrule height \fieldheight depth \fielddepth  width 0pt}
  91. \def\void{}
  92.  
  93. \def\field#1.#2.{\def\next{#1}%
  94.     \ifx\next\empty\blackfieldfalse
  95.      \else\blackfieldtrue\fi
  96.      \ifblackfield\edef\next{#2}%
  97.     \ifx\next\empty\vrule\fieldstrut\hbox to \fieldwidth
  98.          {\hfill\emptyblackfield\hfill}%
  99.         \else\vrule\fieldstrut\blackborder\setpiece{#2}\fi
  100.     \else\vrule\fieldstrut\setpiece{#2}\fi}
  101.  
  102. \def\nfield#1{\vrule height 0pt depth 0pt\fieldstrut\hbox to \fieldwidth
  103.           {\hfil\rm#1\hfil}}
  104.  
  105. \def\linenumber#1{\hbox to 0pt{\rm \kern -10pt #1\hss}}
  106.  
  107. \def\innerloop#1\innerrepeat{\def\innerbody{#1}\inneriterate}
  108. \def\inneriterate{\innerbody\let\next=\inneriterate
  109.     \else\let\next=\relax\fi\next}
  110.  
  111. %
  112. % This is for a character width of 1.4454pt
  113. %
  114. \newcount\numberofchars
  115. \newcount\numberofborderchars
  116. \newcount\numberofgapchars
  117. \numberofchars=14 \numberofborderchars=4
  118. %
  119. % This is for a character width of 0.9636pt
  120. %
  121. %\numberofchars=21 \numberofborderchars=5
  122.  
  123. \numberofgapchars=\numberofchars
  124. \advance\numberofgapchars by -\numberofborderchars
  125. \advance\numberofgapchars by -\numberofborderchars
  126.  
  127. \def\emptyblackfield{\vbox to \fieldheight{\gray
  128.    \offinterlineskip\parindent=0pt
  129.    \setbox0=\hbox{\char1 }\hsize=\wd0 \multiply \hsize by \numberofchars\relax
  130.    \linecount=0
  131.    \loop\advance\linecount by 1 \colcount=0
  132.     \innerloop\advance\colcount by 1 \char1
  133.          \ifnum\colcount<\numberofchars\relax\innerrepeat
  134.     \ifnum\linecount<\numberofchars\relax\break\repeat
  135.    \vss}}
  136.  
  137. \def\blackborder{\hbox to 0pt{\vbox to \fieldheight{\gray
  138.    \offinterlineskip\parindent=0pt
  139.    \setbox0=\hbox{\char1 }\hsize=\wd0 \multiply \hsize by \numberofchars\relax
  140.    \linecount=0
  141.    \count0=\numberofchars \advance\count0 by -\numberofborderchars
  142.    \loop\advance\linecount by 1 \colcount=0
  143.     \innerloop\advance\colcount by 1 \char1
  144.          \ifnum\colcount<\numberofchars\relax\innerrepeat
  145.     \ifnum\linecount<\numberofborderchars\relax\break\repeat
  146.    \break
  147.    \loop\advance\linecount by 1 \colcount=0
  148.     \innerloop\advance\colcount by 1 \char1
  149.          \ifnum\colcount<\numberofborderchars\relax\innerrepeat
  150.     \hfill\colcount=0
  151.     \innerloop\advance\colcount by 1 \char1
  152.          \ifnum\colcount<\numberofborderchars\relax\innerrepeat
  153.     \ifnum\linecount<\count0\relax\break\repeat
  154.    \break
  155.    \loop\advance\linecount by 1 \colcount=0
  156.     \innerloop\advance\colcount by 1 \char1
  157.          \ifnum\colcount<\numberofchars\relax\innerrepeat
  158.     \ifnum\linecount<\numberofchars\relax\break\repeat
  159.    \vss}\hss}}
  160.  
  161. {\notation
  162.  \gdef\showboard{\par\centerline{Board after
  163.   \ifx\colour\whitecolour Black's \else White's \fi
  164.   \number\movenumber.\ move}\vskip \headskipamount
  165.   $$\vbox{\offinterlineskip
  166.   \halign{\linenumber{##}&\vrule\field##.&\field##.&\field##.&\field##.&
  167.             \field##.&\field##.&\field##.&\field##.\vrule\vrule\cr
  168.     \noalign{\hrule}\noalign{\hrule}
  169.     8& .\@a8&*.\@b8& .\@c8&*.\@d8& .\@e8&*.\@f8& .\@g8&*.\@h8\cr
  170.     \noalign{\hrule}
  171.     7&*.\@a7& .\@b7&*.\@c7& .\@d7&*.\@e7& .\@f7&*.\@g7& .\@h7\cr
  172.     \noalign{\hrule}
  173.     6& .\@a6&*.\@b6& .\@c6&*.\@d6& .\@e6&*.\@f6& .\@g6&*.\@h6\cr
  174.     \noalign{\hrule}
  175.     5&*.\@a5& .\@b5&*.\@c5& .\@d5&*.\@e5& .\@f5&*.\@g5& .\@h5\cr
  176.     \noalign{\hrule}
  177.     4& .\@a4&*.\@b4& .\@c4&*.\@d4& .\@e4&*.\@f4& .\@g4&*.\@h4\cr
  178.     \noalign{\hrule}
  179.     3&*.\@a3& .\@b3&*.\@c3& .\@d3&*.\@e3& .\@f3&*.\@g3& .\@h3\cr
  180.     \noalign{\hrule}
  181.     2& .\@a2&*.\@b2& .\@c2&*.\@d2& .\@e2&*.\@f2& .\@g2&*.\@h2\cr
  182.     \noalign{\hrule}
  183.     1&*.\@a1& .\@b1&*.\@c1& .\@d1&*.\@e1& .\@f1&*.\@g1& .\@h1\cr
  184.     \noalign{\hrule}\noalign{\hrule}
  185.     }\vskip \footskipamount
  186.   \halign{\linenumber{##}&\nfield{##}&\nfield{##}&\nfield{##}&\nfield{##}&
  187.              \nfield{##}&\nfield{##}&\nfield{##}&\nfield{##}\cr
  188.     &a&b&c&d&e&f&g&h\cr}
  189.   }$$\par}
  190. }
  191.  
  192. {\notation
  193.  \gdef\setupboard{\def\colour{W}\movenumber=0
  194.  \gdef\@a8{\ST}\gdef\@b8{\SS}\gdef\@c8{\SL}\gdef\@d8{\SD}%
  195.  \gdef\@e8{\SK}\gdef\@f8{\SL}\gdef\@g8{\SS}\gdef\@h8{\ST}%
  196.  \gdef\@a7{\SB}\gdef\@b7{\SB}\gdef\@c7{\SB}\gdef\@d7{\SB}%
  197.  \gdef\@e7{\SB}\gdef\@f7{\SB}\gdef\@g7{\SB}\gdef\@h7{\SB}%
  198.  \gdef\@a6{\void}\gdef\@b6{\void}\gdef\@c6{\void}\gdef\@d6{\void}%
  199.  \gdef\@e6{\void}\gdef\@f6{\void}\gdef\@g6{\void}\gdef\@h6{\void}%
  200.  \gdef\@a5{\void}\gdef\@b5{\void}\gdef\@c5{\void}\gdef\@d5{\void}%
  201.  \gdef\@e5{\void}\gdef\@f5{\void}\gdef\@g5{\void}\gdef\@h5{\void}%
  202.  \gdef\@a4{\void}\gdef\@b4{\void}\gdef\@c4{\void}\gdef\@d4{\void}%
  203.  \gdef\@e4{\void}\gdef\@f4{\void}\gdef\@g4{\void}\gdef\@h4{\void}%
  204.  \gdef\@a3{\void}\gdef\@b3{\void}\gdef\@c3{\void}\gdef\@d3{\void}%
  205.  \gdef\@e3{\void}\gdef\@f3{\void}\gdef\@g3{\void}\gdef\@h3{\void}%
  206.  \gdef\@a2{\WB}\gdef\@b2{\WB}\gdef\@c2{\WB}\gdef\@d2{\WB}%
  207.  \gdef\@e2{\WB}\gdef\@f2{\WB}\gdef\@g2{\WB}\gdef\@h2{\WB}%
  208.  \gdef\@a1{\WT}\gdef\@b1{\WS}\gdef\@c1{\WL}\gdef\@d1{\WD}%
  209.  \gdef\@e1{\WK}\gdef\@f1{\WL}\gdef\@g1{\WS}\gdef\@h1{\WT}}
  210. }
  211. \setupboard
  212. %
  213. %---------------------- Moves ------------------------------------
  214. %
  215. \def\move#1#2#3#4#5#6 {% Syntax: [KDTLS ][a-h][1-8][-x][a-h][1-8]
  216.     % Man beachte, dass der erste Parameter fehlen kann, d.h., dies muss
  217.     % erst ermittelt werden mit hilfe des dritten.
  218.     \if#3-\@move B#1#2#3#4#5%
  219.        \else\if#3x\@move B#1#2#3#4#5%
  220.         \else\@move #1#2#3#4#5#6\fi\fi
  221.     \ifx\colour\whitecolour\def\colour{S}\advance\movenumber by 1
  222.     \else\def\colour{W}\fi
  223.     }
  224.  
  225. \def\whitecolour{W}
  226. \def\colour{W}
  227.  
  228. \def\@move#1#2#3#4#5#6{% Syntax: [KDTLSB][a-h][1-8][-x][a-h][1-8]
  229.     \expandafter\def\csname @#2#3\endcsname{\void}%
  230.     \ifx\colour\whitecolour
  231.     \expandafter\def\csname @#5#6\endcsname{\csname W#1\endcsname}%
  232.     \else\expandafter\def\csname @#5#6\endcsname{\csname S#1\endcsname}\fi}
  233.  
  234. \catcode`\@=12
  235. %
  236. %---------------------- End of Macro Definitions -----------------
  237. %
  238.     \move e2-e4  \move c7-c6
  239.     \move d2-d4  \move d7-d5
  240.     \move Sb1-d2 \move d5xe4
  241.     \move Sd2xe4 \move Sb8-d7
  242.     \move Sg1-f3
  243.   \showboard
  244.